package main

import "fmt"

/**
go build -gcflags '-m -l' case_unknown_type.go
# command-line-arguments
./case_unknown_type.go:6:12: new(string) escapes to heap
./case_unknown_type.go:9:13: ... argument does not escape

str 变量逃到了堆上，也就是该对象在堆上分配
分析结果：
func Println(a ...interface{}) (n int, err error)
通过对其分析，可得知当形参为 interface 类型时，在编译阶段编译器无法确定其具体的类型。因此会产生逃逸，最终分配到堆上。
可以看下内部的 reflect.TypeOf(arg).Kind() 语句，其会造成堆逃逸，而表象就是 interface 类型会导致该对象分配到堆上。
 */
func main() {
	str := new(string)
	*str = "EDDYCJY"

	fmt.Println(str)
}
